User interface development in modern software applications typically involves interaction between an artistic team responsible for the look and feel of the user interface (e.g., such as graphics designers, usability engineers, and program managers) and a programming team responsible for implementing the user interface (e.g., software developers). In a traditional approach, an artistic team may define artwork using a layered graphical design tool and then output flattened graphical definitions of individual user interface elements for use by the programming team. For example, having defined a layered representation of an assortment of user interface artwork, the artistic team may then define an “up-button” graphic in a flattened format in a graphics file (e.g., a GIF file) and a “down-button” graphic in a flattened format in a separate graphics file. The programming team can then use presentation scripting or high level programming code to load and add user interface functionality (e.g., user interactivity) to the individual user interface elements as part of the software application.
However, this development environment introduces a gap between the artistic team and the programming team. The artistic team does not generally possess the scripting or programming skills needed to prototype user interactivity with the user interface elements during the initial design phase. As such, the artistic team has to wait for the programming team to integrate the artwork before they can evaluate the artwork under interactive conditions. Based on this evaluation, the artistic team can then revise the set of individual graphics files and provide this new set to the programming team, which updates the scripting and/or programming to accommodate the new graphics files. This back-and-forth interaction proceeds, inefficiently, until both the artistic team and the programming team are satisfied with the user interface.